#pragma once

#include <vector>

class ReLU
{
public:
    ReLU() = default;
    virtual ~ReLU() = default;

    void forward(const std::vector<double>& input, std::vector<double> &output);
    std::vector<double> backward();

    std::vector<double> backward(std::vector<double> &input, const std::vector<double>& output_derivative);

    void forward(const std::vector<std::vector<double>>& input, std::vector<std::vector<double>> &output);

    std::vector<std::vector<double>> backward(const std::vector<std::vector<double>> &output_derivative);
private:
    std::vector<double> input_{};
    std::vector<std::vector<double>> input_batch_{};
};
